Jak dostat radky do jednoho
Otázka od: Delphin
6. 12. 2002 17:36
Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
dlouho.
select ID,X.Pocet as XPocet,Y.Pocet as YPocet
from A
left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
X.ID=A.ID
left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
Y.ID=A.ID
Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi
select ID,Typ,sum(Pocet) from B group by ID,Typ
akorat nevim, jak dostanu tech nekolik radku do jednoho.
Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
jednoho, pripadne jak jinak se to da vyresit.
Jedna se o MSSQL.
Diky Delphin
Odpovedá: Ing. Pavel Žilinec
9. 12. 2002 7:27
Lze pouzit neco takovehoto (pokud znas presne sloupce, tak je to pak
optimalni). Podle potreby muzes menit tu agregacni fci. Mam to
vyzkousene a kupodivu je CASE docela rychly
select ID,
PocetX = max(case Typ when 'X' then b.Pocet else 0 end),
PocetY = max(case Typ when 'Y' then b.Pocet else 0 end),
from A
left outer join B on a.ID = b.ID
group by a.ID
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
D> Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
D> joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
D> dlouho.
D> select ID,X.Pocet as XPocet,Y.Pocet as YPocet
D> from A
D> left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
D> X.ID=A.ID
D> left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
D> Y.ID=A.ID
D> Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi
D> select ID,Typ,sum(Pocet) from B group by ID,Typ
D> akorat nevim, jak dostanu tech nekolik radku do jednoho.
D> Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
D> jednoho, pripadne jak jinak se to da vyresit.
D> Jedna se o MSSQL.
D> Diky Delphin
Odpovedá: Lstiburek Pavel
9. 12. 2002 13:36
Neni mi jasne co presne chces, ale napr.:
select ID,
Sum(CASE WHEB TYP = 'Y' THEN Pocet ELSE 0 END) As Ypocet,
Sum(CASE WHEB TYP = 'X' THEN Pocet ELSE 0 END) As Xpocet
from B
group by ID
Pavel
-----Original Message-----
From: Delphin [mailto:delphin@post.cz]
Sent: Friday, December 06, 2002 4:55 PM
To: delphi-l@clexpert.cz
Subject: Jak dostat radky do jednoho
Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
dlouho.
select ID,X.Pocet as XPocet,Y.Pocet as YPocet
from A
left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
X.ID=A.ID
left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
Y.ID=A.ID
Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi
select ID,Typ,sum(Pocet) from B group by ID,Typ
akorat nevim, jak dostanu tech nekolik radku do jednoho.
Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
jednoho, pripadne jak jinak se to da vyresit.
Jedna se o MSSQL.
Diky Delphin